package com.duoduo.双指针;

import java.util.Arrays;

/**
 * @program: algorithm
 * @description: 有序数组的平方
 * 给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
 * 输入：nums = [-4,-1,0,3,10]
 * 输出：[0,1,9,16,100]
 * 解释：平方后，数组变为 [16,1,0,9,100]
 * 排序后，数组变为 [0,1,9,16,100]
 * @author: chaidl  ！
 * @create: 2022-03-14 19:43
 */
public class 有序数组的平方 {
    public int[] sortedSquares(int[] nums) {
        int n=nums.length;
        int[] arr=new int[n];
        for (int i=0,j = n-1,pos=n-1;i<=j;){
            if (nums[i]*nums[i]>nums[j]*nums[j]){
                arr[pos]=nums[i]*nums[i];
                ++i;
            }else {
                arr[pos]=nums[j]*nums[j];
                --j;
            }
            pos--;
        }
        return arr;
    }
    public int[] sortedSquares2(int[] nums) {
        int left=0;
        int right=nums.length - 1;
        //从第一个位置开始和最后一个位置开始比较
        int pos=nums.length - 1;
        int[] arr=new int[nums.length];
        while (left<=right){
            if (nums[left]* nums[left]>nums[right]*nums[right]){
                arr[pos]=nums[left]* nums[left];
                left++;
            }else {
                arr[pos]=nums[right]*nums[right];
                right--;
            }
            pos--;
        }

        return arr;
    }
}
